package org.example.day01;

import java.util.Scanner;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO
 * 攀登者喜欢寻找各种地图，并且尝试攀登到最高的山峰。
 * 地图表示为一维数组，数组的索引代表水平位置，数组的高度代表相对海拔高度。其中数组元素0代表地面。
 * 例如[0,1,4,3,1,0,0,1,2,3,1,2,1,0], 代表如下图所示的地图，地图中有两个山脉位置分别为 1,2,3,4,5和8,9,10,11,12,13，最高峰高度分别为4,3。最高峰位置分别为3,10。
 * 一个山脉可能有多座山峰(高度大于两边，或者在地图边界)。
 * <p>
 * <p>
 * <p>
 * 4
 * +---+
 * |   |
 * |   | 3                       3
 * |   |
 * |   +---+                   -----
 * |       |                   |   |
 * 2 |       |                 2 |   |     2
 * |       |                   |   |
 * +---+       |               ----+   |   +---+
 * |           |               |       |   |   |
 * 1 |           | 1           1 |       | 1 |   | 1
 * |           |               |       |   |   |
 * +---+           +---+       +---+       +---+   +---+
 * |                   |       |                       |
 * 0 |                   | 0   0 |                       | 0
 * |                   |       |                       |
 * +---+                   +-------+                       +---+
 * <p>
 * 0   1   2   3   4   5   6   7   8   9  10  11  12  13  14
 * 2. 登山时会消耗登山者的体力(整数)，上山时，消耗相邻高度差两倍的体力，下坡时消耗相邻高度差一倍的体力，平地不消耗体力，登山者体力消耗到零时会有生命危险。
 * 例如，上图所示的山峰，从索引0，走到索引1，高度差为1，需要消耗2X1 = 2 的体力，从索引2高度2走到高度4索引3需要消耗2X2 = 4 的体力。如果是从索引3走到索引4则消耗1X1的体力。
 * 3. 登山者体力上限为999。
 * 4. 登山时的起点和终点可以是地图中任何高度为0的地面例如上图中的0,6,7,14 都可以作为登山的起点和终点
 * 攀登者想要评估一张地图内有多少座山峰可以进行攀登，且可以安全返回到地面，且无生命危险。
 * <p>
 * 例如上图中的数组，有3个不同的山峰，登上位置在3的山可以从位置0或者位置6开始，从位置0登到山顶需要消耗体力1X2+1X2+2X2 = 8,
 * 从山顶返回到地面0需要消耗体力 2X1 + 1X1 + 1X1 = 4 的体力，按照登山路线0->3->0需要消耗体力 12。攀登者至少需要12以上的体力（大于12）才能安全返回
 * @date 2024/3/11 15:22
 */
public class test009 {
    public static void main(String[] args) {
        // 读取输入
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        // 解析输入为数组
        String[] arr = input.substring(1, input.length() - 1).split(",");
        int[] mapArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            mapArr[i] = Integer.parseInt(arr[i].trim());
        }
        // 调用函数计算山峰数量
        System.out.println(countPeaks(mapArr));
    }

    // 计算山峰数量的函数
    static int countPeaks(int[] mapArr) {
        int peakCount = 0; // 初始化山峰数量为0
        for (int i = 1; i < mapArr.length - 1; i++) {
            // 如果当前点比左右两边的点都高，那么它就是一个山峰
            if (mapArr[i] > mapArr[i - 1] && mapArr[i] > mapArr[i + 1]) {
                peakCount++;
            }
            // 如果当前点在数组的左边界，并且比右边的点高，那么它也是一个山峰
            else if (i == 1 && mapArr[i] > mapArr[i + 1]) {
                peakCount++;
            }
            // 如果当前点在数组的右边界，并且比左边的点高，那么它也是一个山峰
            else if (i == mapArr.length - 2 && mapArr[i] > mapArr[i - 1]) {
                peakCount++;
            }
        }
        return peakCount;
    }
}


